url <- 'https://raw.githubusercontent.com/kyleknox3/STA553/main/week6/LifeIncomePopulation.csv'
data <- read.csv(url)
income <- na.omit(data)
data2015 <- income %>%
filter(year == 2015)
write.csv(data2015, "/Users/kyleknox/Documents/M.S. Applied Statistics/SPRING 2024/STA533/week6/data2015.csv", row.names = FALSE)
regions <- c("Asia" = "#332288", "Europe" = "#117733", "Africa" = "#44AA99", "Americas" = "#88CCEE", "Oceania" = "#AA4499")
gg <- ggplot(data2015, aes(x = lifeExp, y = income, size = population,
color = region, text = paste("Country:", country,"<br>Population:", population, "<br>Income:", income))) +
geom_point(alpha = 0.7) +
scale_size_continuous(range = c(1, 20)) +
theme_minimal() +
labs(title = "Life Expectancy vs. Income in 2015",
x = "Life Expectancy",
y = "Income") +
scale_color_manual(values = regions, name = "Region") +
geom_point(shape = 21, colour = "black", fill = NA)
plotly_gg <- ggplotly(gg, tooltip = "text")
plotly_gg
A Look Inside 2015
In the year 2015, there is a positive correlation between life
expectancy and income. The higher the average income for a country, the
better access individuals have to healthcare, nutrition, and living
conditions which directly impact life expectancy. The varying income
across the regions of the world show how economic difficulties influence
life expectancy. Countries in more developed regions have higher income
and longer life expectancy compared to those of the underdeveloped
world. However, when looking at population, the countries with larger
populations could have a lower average due to resource allocation and
the wealth gap. Therefore, looking at larger countries median income may
be more beneficial. Overall, there is a general global trend towards
higher life expectancy and income, signifying worldwide improvements in
healthcare, technology, and economic development. Although, it is
apparent that these improvements are not evenly distributed across the
all regions of the world.
url <- 'https://raw.githubusercontent.com/kyleknox3/STA553/main/week6/LifeIncomePopulation.csv'
data <- read.csv(url)
income2 <- na.omit(data)
regions <- c("Asia" = "#332288", "Europe" = "#117733", "Africa" = "#44AA99", "Americas" = "#88CCEE", "Oceania" = "#AA4499")
plot <- ggplot(income2, aes(x = lifeExp, y = income, size = population, color = region)) +
geom_point(alpha = 0.7, show.legend = TRUE, aes(group = year)) +
scale_size(range = c(2, 12), name = "Population Size") +
scale_color_manual(values = regions, name = "Region") +
labs(title= 'Life Expectancy and Income Over the Years', subtitle = 'Year: {frame_time}', x = 'Life Expectancy', y = 'Income') +
theme_minimal() +
transition_time(year) +
ease_aes('linear')
animate(plot, width = 900, height = 500, duration = 30)
A Look Inside the Income and Life Expextancy
Across the World
There has been a significant increase in the average life expectancy
globally since the early 1800s. The shift is more prevalent in the early
20th century. These life expectancy improvements could be related to
advancements in healthcare, nutrition, and living conditions over time.
Income has an overall positive trend, with a steep incline
after the mid 20th century. Some causes for these increases could be a
result of industrialization, globalization, and technological advances
that have influenced productivity. There is a significant increase in
income in the late 20th century, which could be indicative of economic
expansion.
The worlds population has also shown significant
growth since the 1800s, with an acceleration in the rate of increase
from the 20th century to present day. This increased population could be
a result of decreased mortality rates, medical advancements, and other
factors leading to higher birth rates and lower death rates. With a
continued increase in the global population challenges like resource
management, sustainability, and a detrimental environmental impact will
arise.
With the increased income, population, and life
expectancy over the past few centuries, it shows the the global economic
increases for the worlds population. However, these increases do provide
challenges for the future in sustainability and the distribution of
resources. These challenges are not just limited regionally but also
globally.
LS0tCnRpdGxlOiAiTGlmZSBFeHBlY3RhbmN5IGFuZCBJbmNvbWUgZm9yIHRoZSBZZWFyIDIwMTUiCmF1dGhvcjogIkt5bGUgS25veCIKZGF0ZTogIldlZWsgNiIKb3V0cHV0OgogIGh0bWxfZG9jdW1lbnQ6IAogICAgdG9jOiB5ZXMKICAgIHRvY19kZXB0aDogNAogICAgdG9jX2Zsb2F0OiB5ZXMKICAgIGZpZ193aWR0aDogNgogICAgbnVtYmVyX3NlY3Rpb25zOiB5ZXMKICAgIHRvY19jb2xsYXBzZWQ6IHllcwogICAgY29kZV9mb2xkaW5nOiBoaWRlCiAgICBjb2RlX2Rvd25sb2FkOiB5ZXMKICAgIHNtb290aF9zY3JvbGw6IHRydWUKICAgIHRoZW1lOiByZWFkYWJsZQogICAgZmlnX2hlaWdodDogNAotLS0KICAKICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgogIAogIGRpdiNUT0MgbGkgewpsaXN0LXN0eWxlOm5vbmU7CmJhY2tncm91bmQtY29sb3I6bGlnaHRncmF5OwpiYWNrZ3JvdW5kLWltYWdlOm5vbmU7CmJhY2tncm91bmQtcmVwZWF0Om5vbmU7CmJhY2tncm91bmQtcG9zaXRpb246MDsKZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7CmNvbG9yOiAjNzgwYzBjOwogIH0KCi8qIG1vdXNlIG92ZXIgbGluayAqLwogIGRpdiNUT0MgYTpob3ZlciB7CmNvbG9yOiByZWQ7Cn0KCi8qIHVudmlzaXRlZCBsaW5rICovCiAgZGl2I1RPQyBhOmxpbmsgewpjb2xvcjogYmx1ZTsKfQoKCgpoMS50aXRsZSB7CiAgZm9udC1zaXplOiAyNHB4OwogIGNvbG9yOiBEYXJrYmx1ZTsKICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7CiAgZm9udC12YXJpYW50LWNhcHM6IG5vcm1hbDsKfQpoNC5hdXRob3IgeyAKICBmb250LXNpemU6IDE4cHg7CiAgZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7CiAgY29sb3I6IERhcmtSZWQ7CiAgdGV4dC1hbGlnbjogY2VudGVyOwp9Cmg0LmRhdGUgeyAKICBmb250LXNpemU6IDE4cHg7CiAgZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7CiAgY29sb3I6IERhcmtCbHVlOwogIHRleHQtYWxpZ246IGNlbnRlcjsKfQpoMSB7CiAgZm9udC1zaXplOiAyMnB4OwogIGZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOwogIGNvbG9yOiBkYXJrcmVkOwogIHRleHQtYWxpZ246IGNlbnRlcjsKfQpoMiB7IC8KICAgIGZvbnQtc2l6ZTogMThweDsKICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsKICBjb2xvcjogbmF2eTsKICB0ZXh0LWFsaWduOiBsZWZ0Owp9CgpoMyB7IAogIGZvbnQtc2l6ZTogMTVweDsKICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsKICBjb2xvcjogbmF2eTsKICB0ZXh0LWFsaWduOiBsZWZ0Owp9CgpoNCB7IC8qIEhlYWRlciA0IC0gYW5kIHRoZSBhdXRob3IgYW5kIGRhdGEgaGVhZGVycyB1c2UgdGhpcyB0b28gICovCiAgICBmb250LXNpemU6IDE4cHg7CiAgZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7CiAgY29sb3I6IGRhcmtyZWQ7CiAgdGV4dC1hbGlnbjogbGVmdDsKfQoKLyogdW52aXNpdGVkIGxpbmsgKi8KICBhOmxpbmsgewogICAgY29sb3I6IGdyZWVuOwogIH0KCi8qIHZpc2l0ZWQgbGluayAqLwogIGE6dmlzaXRlZCB7CiAgICBjb2xvcjogZ3JlZW47CiAgfQoKLyogbW91c2Ugb3ZlciBsaW5rICovCiAgYTpob3ZlciB7CiAgICBjb2xvcjogcmVkOwogIH0KCi8qIHNlbGVjdGVkIGxpbmsgKi8KICBhOmFjdGl2ZSB7CiAgICBjb2xvcjogeWVsbG93OwogIH0KCjwvc3R5bGU+CiAgCiAgCiAgYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9CiMgY29kZSBjaHVuayBzcGVjaWZpZXMgd2hldGhlciB0aGUgUiBjb2RlLCB3YXJuaW5ncywgYW5kIG91dHB1dCAKIyB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZSBvdXRwdXQgZmlsZXMuCm9wdGlvbnMocmVwb3MgPSBsaXN0KENSQU49Imh0dHA6Ly9jcmFuLnJzdHVkaW8uY29tLyIpKQppZiAoIXJlcXVpcmUoInRpZHl2ZXJzZSIpKSB7CiAgaW5zdGFsbC5wYWNrYWdlcygidGlkeXZlcnNlIikKICBsaWJyYXJ5KHRpZHl2ZXJzZSkKfQppZiAoIXJlcXVpcmUoImtuaXRyIikpIHsKICBpbnN0YWxsLnBhY2thZ2VzKCJrbml0ciIpCiAgbGlicmFyeShrbml0cikKfQppZiAoIXJlcXVpcmUoImNvd3Bsb3QiKSkgewogIGluc3RhbGwucGFja2FnZXMoImNvd3Bsb3QiKQogIGxpYnJhcnkoY293cGxvdCkKfQppZiAoIXJlcXVpcmUoImxhdGV4MmV4cCIpKSB7CiAgaW5zdGFsbC5wYWNrYWdlcygibGF0ZXgyZXhwIikKICBsaWJyYXJ5KGxhdGV4MmV4cCkKfQppZiAoIXJlcXVpcmUoInBsb3RseSIpKSB7CiAgaW5zdGFsbC5wYWNrYWdlcygicGxvdGx5IikKICBsaWJyYXJ5KHBsb3RseSkKfQppZiAoIXJlcXVpcmUoImdhcG1pbmRlciIpKSB7CiAgaW5zdGFsbC5wYWNrYWdlcygiZ2FwbWluZGVyIikKICBsaWJyYXJ5KGdhcG1pbmRlcikKfQppZiAoIXJlcXVpcmUoInBuZyIpKSB7CiAgaW5zdGFsbC5wYWNrYWdlcygicG5nIikgICAgICAgICAgICAgIyBJbnN0YWxsIHBuZyBwYWNrYWdlCiAgbGlicmFyeSgicG5nIikKfQppZiAoIXJlcXVpcmUoIlJDdXJsIikpIHsKICBpbnN0YWxsLnBhY2thZ2VzKCJSQ3VybCIpICAgICAgICAgICAgICMgSW5zdGFsbCBSQ3VybCBwYWNrYWdlCiAgbGlicmFyeSgiUkN1cmwiKQp9CmlmICghcmVxdWlyZSgiY29sb3VycGlja2VyIikpIHsKICBpbnN0YWxsLnBhY2thZ2VzKCJjb2xvdXJwaWNrZXIiKSAgICAgICAgICAgICAgCiAgbGlicmFyeSgiY29sb3VycGlja2VyIikKfQppZiAoIXJlcXVpcmUoImdpZnNraSIpKSB7CiAgaW5zdGFsbC5wYWNrYWdlcygiZ2lmc2tpIikgICAgICAgICAgICAgIAogIGxpYnJhcnkoImdpZnNraSIpCn0KaWYgKCFyZXF1aXJlKCJtYWdpY2siKSkgewogIGluc3RhbGwucGFja2FnZXMoIm1hZ2ljayIpICAgICAgICAgICAgICAKICBsaWJyYXJ5KCJtYWdpY2siKQp9CmlmICghcmVxdWlyZSgiZ3JEZXZpY2VzIikpIHsKICBpbnN0YWxsLnBhY2thZ2VzKCJnckRldmljZXMiKSAgICAgICAgICAgICAgCiAgbGlicmFyeSgiZ3JEZXZpY2VzIikKfQojIyMgZ2dwbG90IGFuZCBleHRlbnNpb25zCmlmICghcmVxdWlyZSgiZ2dwbG90MiIpKSB7CiAgaW5zdGFsbC5wYWNrYWdlcygiZ2dwbG90MiIpICAgICAgICAgICAgICAKICBsaWJyYXJ5KCJnZ3Bsb3QyIikKfQppZiAoIXJlcXVpcmUoImdnYW5pbWF0ZSIpKSB7CiAgaW5zdGFsbC5wYWNrYWdlcygiZ2dhbmltYXRlIikgICAgICAgICAgICAgIAogIGxpYnJhcnkoImdnYW5pbWF0ZSIpCn0KaWYgKCFyZXF1aXJlKCJnZ3JpZGdlcyIpKSB7CiAgaW5zdGFsbC5wYWNrYWdlcygiZ2dyaWRnZXMiKSAgICAgICAgICAgICAgCiAgbGlicmFyeSgiZ2dyaWRnZXMiKQp9CmlmICghcmVxdWlyZSgiZHBseXIiKSkgewogIGluc3RhbGwucGFja2FnZXMoImRwbHlyIikgICAgICAgICAgICAgIAogIGxpYnJhcnkoImRwbHlyIikKfQppZiAoIXJlcXVpcmUoImh0bWx0b29scyIpKSB7CiAgaW5zdGFsbC5wYWNrYWdlcygiaHRtbHRvb2xzIikgICAgICAgICAgICAgIAogIGxpYnJhcnkoImh0bWx0b29scyIpCn0KaWYgKCFyZXF1aXJlKCJybWFya2Rvd24iKSkgewogIGluc3RhbGwucGFja2FnZXMoInJtYXJrZG93biIpICAgICAgICAgICAgICAKICBsaWJyYXJ5KCJybWFya2Rvd24iKQp9CiMga25pdHI6Om9wdHNfa25pdCRzZXQocm9vdC5kaXIgPSAiL1VzZXJzL2t5bGVrbm94L0RvY3VtZW50cy9NLlMuIEFwcGxpZWQgU3RhdGlzdGljcy9TUFJJTkcgMjAyNC9TVEE1MzMvd2VlazYpCiMga25pdHI6Om9wdHNfa25pdCRzZXQocm9vdC5kaXIgPSAiQzpcXFNUQTQ5MFxcdzA1IikKCmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gVFJVRSwgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nID0gRkFMU0UsICAgCiAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBUUlVFLCAgIAogICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA9IEZBTFNFKQpgYGAKYGBge3IgY29kZSwgZmlnLndpZHRoPTEwLCBmaWcuaGVpZ2h0PTYuOH0KdXJsIDwtICdodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20va3lsZWtub3gzL1NUQTU1My9tYWluL3dlZWs2L0xpZmVJbmNvbWVQb3B1bGF0aW9uLmNzdicKZGF0YSA8LSByZWFkLmNzdih1cmwpCmluY29tZSA8LSBuYS5vbWl0KGRhdGEpCgpkYXRhMjAxNSA8LSBpbmNvbWUgJT4lCiAgZmlsdGVyKHllYXIgPT0gMjAxNSkKCndyaXRlLmNzdihkYXRhMjAxNSwgIi9Vc2Vycy9reWxla25veC9Eb2N1bWVudHMvTS5TLiBBcHBsaWVkIFN0YXRpc3RpY3MvU1BSSU5HIDIwMjQvU1RBNTMzL3dlZWs2L2RhdGEyMDE1LmNzdiIsIHJvdy5uYW1lcyA9IEZBTFNFKQoKcmVnaW9ucyA8LSBjKCJBc2lhIiA9ICIjMzMyMjg4IiwgIkV1cm9wZSIgPSAiIzExNzczMyIsICJBZnJpY2EiID0gIiM0NEFBOTkiLCAiQW1lcmljYXMiID0gIiM4OENDRUUiLCAiT2NlYW5pYSIgPSAiI0FBNDQ5OSIpCgpnZyA8LSBnZ3Bsb3QoZGF0YTIwMTUsIGFlcyh4ID0gbGlmZUV4cCwgeSA9IGluY29tZSwgc2l6ZSA9IHBvcHVsYXRpb24sIAogICAgICBjb2xvciA9IHJlZ2lvbiwgdGV4dCA9IHBhc3RlKCJDb3VudHJ5OiIsIGNvdW50cnksIjxicj5Qb3B1bGF0aW9uOiIsIHBvcHVsYXRpb24sICI8YnI+SW5jb21lOiIsIGluY29tZSkpKSArCiAgZ2VvbV9wb2ludChhbHBoYSA9IDAuNykgKyAKICBzY2FsZV9zaXplX2NvbnRpbnVvdXMocmFuZ2UgPSBjKDEsIDIwKSkgKyAKICB0aGVtZV9taW5pbWFsKCkgKwogIGxhYnModGl0bGUgPSAiTGlmZSBFeHBlY3RhbmN5IHZzLiBJbmNvbWUgaW4gMjAxNSIsCiAgICAgICB4ID0gIkxpZmUgRXhwZWN0YW5jeSIsCiAgICAgICB5ID0gIkluY29tZSIpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gcmVnaW9ucywgbmFtZSA9ICJSZWdpb24iKSArIAogIGdlb21fcG9pbnQoc2hhcGUgPSAyMSwgY29sb3VyID0gImJsYWNrIiwgZmlsbCA9IE5BKSAKCgpwbG90bHlfZ2cgPC0gZ2dwbG90bHkoZ2csIHRvb2x0aXAgPSAidGV4dCIpCgpwbG90bHlfZ2cKCmBgYAoKPGJyPgo8YnI+CjxkaXYgc3R5bGU9InRleHQtYWxpZ246IGNlbnRlcjsiPjxzcGFuIHN0eWxlPSJjb2xvcjogcmVkOyI+QSBMb29rIEluc2lkZSAyMDE1PC9zcGFuPjwvZGl2PgoKPGRpdiBzdHlsZT0id2lkdGg6IDk1JTsgbWFyZ2luOiAwIGF1dG87IHRleHQtYWxpZ246IGp1c3RpZnk7IGJvcmRlcjogMXB4IHNvbGlkICNjY2M7IHBhZGRpbmc6IDEwcHg7IGJveC1zaXppbmc6IGJvcmRlci1ib3g7Ij4KICA8cCBzdHlsZT0idGV4dC1hbGlnbjoganVzdGlmeTsiPgpJbiB0aGUgeWVhciAyMDE1LCB0aGVyZSBpcyBhIHBvc2l0aXZlIGNvcnJlbGF0aW9uIGJldHdlZW4gbGlmZSBleHBlY3RhbmN5IGFuZCBpbmNvbWUuIFRoZSBoaWdoZXIgdGhlIGF2ZXJhZ2UgaW5jb21lIGZvciBhIGNvdW50cnksIHRoZSBiZXR0ZXIgYWNjZXNzIGluZGl2aWR1YWxzIGhhdmUgdG8gaGVhbHRoY2FyZSwgbnV0cml0aW9uLCBhbmQgbGl2aW5nIGNvbmRpdGlvbnMgd2hpY2ggZGlyZWN0bHkgaW1wYWN0IGxpZmUgZXhwZWN0YW5jeS4gVGhlIHZhcnlpbmcgaW5jb21lIGFjcm9zcyB0aGUgcmVnaW9ucyBvZiB0aGUgd29ybGQgc2hvdyBob3cgZWNvbm9taWMgZGlmZmljdWx0aWVzIGluZmx1ZW5jZSBsaWZlIGV4cGVjdGFuY3kuICBDb3VudHJpZXMgaW4gbW9yZSBkZXZlbG9wZWQgcmVnaW9ucyBoYXZlIGhpZ2hlciBpbmNvbWUgYW5kIGxvbmdlciBsaWZlIGV4cGVjdGFuY3kgY29tcGFyZWQgdG8gdGhvc2Ugb2YgdGhlIHVuZGVyZGV2ZWxvcGVkIHdvcmxkLiBIb3dldmVyLCB3aGVuIGxvb2tpbmcgYXQgcG9wdWxhdGlvbiwgdGhlIGNvdW50cmllcyB3aXRoIGxhcmdlciBwb3B1bGF0aW9ucyBjb3VsZCBoYXZlIGEgbG93ZXIgYXZlcmFnZSBkdWUgdG8gcmVzb3VyY2UgYWxsb2NhdGlvbiBhbmQgdGhlIHdlYWx0aCBnYXAuIFRoZXJlZm9yZSwgbG9va2luZyBhdCBsYXJnZXIgY291bnRyaWVzIG1lZGlhbiBpbmNvbWUgbWF5IGJlIG1vcmUgYmVuZWZpY2lhbC4gT3ZlcmFsbCwgdGhlcmUgaXMgYSBnZW5lcmFsIGdsb2JhbCB0cmVuZCB0b3dhcmRzIGhpZ2hlciBsaWZlIGV4cGVjdGFuY3kgYW5kIGluY29tZSwgc2lnbmlmeWluZyB3b3JsZHdpZGUgaW1wcm92ZW1lbnRzIGluIGhlYWx0aGNhcmUsIHRlY2hub2xvZ3ksIGFuZCBlY29ub21pYyBkZXZlbG9wbWVudC4gIEFsdGhvdWdoLCBpdCBpcyBhcHBhcmVudCB0aGF0IHRoZXNlIGltcHJvdmVtZW50cyBhcmUgbm90IGV2ZW5seSBkaXN0cmlidXRlZCBhY3Jvc3MgdGhlIGFsbCByZWdpb25zIG9mIHRoZSB3b3JsZC4gPGJyPiAKIDwvcD4KPC9kaXY+Cjxicj4KPGJyPgoKYGBge3IgcGxvdC1hbmltYXRpb24sIGZpZy53aWR0aD0xMCwgZmlnLmhlaWdodD02Ljh9CnVybCA8LSAnaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2t5bGVrbm94My9TVEE1NTMvbWFpbi93ZWVrNi9MaWZlSW5jb21lUG9wdWxhdGlvbi5jc3YnCmRhdGEgPC0gcmVhZC5jc3YodXJsKQppbmNvbWUyIDwtIG5hLm9taXQoZGF0YSkKCnJlZ2lvbnMgPC0gYygiQXNpYSIgPSAiIzMzMjI4OCIsICJFdXJvcGUiID0gIiMxMTc3MzMiLCAiQWZyaWNhIiA9ICIjNDRBQTk5IiwgIkFtZXJpY2FzIiA9ICIjODhDQ0VFIiwgIk9jZWFuaWEiID0gIiNBQTQ0OTkiKQoKcGxvdCA8LSBnZ3Bsb3QoaW5jb21lMiwgYWVzKHggPSBsaWZlRXhwLCB5ID0gaW5jb21lLCBzaXplID0gcG9wdWxhdGlvbiwgY29sb3IgPSByZWdpb24pKSArCiAgZ2VvbV9wb2ludChhbHBoYSA9IDAuNywgc2hvdy5sZWdlbmQgPSBUUlVFLCBhZXMoZ3JvdXAgPSB5ZWFyKSkgKwogIHNjYWxlX3NpemUocmFuZ2UgPSBjKDIsIDEyKSwgbmFtZSA9ICJQb3B1bGF0aW9uIFNpemUiKSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IHJlZ2lvbnMsIG5hbWUgPSAiUmVnaW9uIikgKwogIGxhYnModGl0bGU9ICdMaWZlIEV4cGVjdGFuY3kgYW5kIEluY29tZSBPdmVyIHRoZSBZZWFycycsIHN1YnRpdGxlID0gJ1llYXI6IHtmcmFtZV90aW1lfScsIHggPSAnTGlmZSBFeHBlY3RhbmN5JywgeSA9ICdJbmNvbWUnKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICB0cmFuc2l0aW9uX3RpbWUoeWVhcikgKwogIGVhc2VfYWVzKCdsaW5lYXInKQoKYW5pbWF0ZShwbG90LCB3aWR0aCA9IDkwMCwgaGVpZ2h0ID0gNTAwLCBkdXJhdGlvbiA9IDMwKQpgYGAKPGJyPgo8YnI+CjxkaXYgc3R5bGU9InRleHQtYWxpZ246IGNlbnRlcjsiPjxzcGFuIHN0eWxlPSJjb2xvcjogcmVkOyI+QSBMb29rIEluc2lkZSB0aGUgSW5jb21lIGFuZCBMaWZlIEV4cGV4dGFuY3kgQWNyb3NzIHRoZSBXb3JsZDwvc3Bhbj48L2Rpdj4KCjxkaXYgc3R5bGU9IndpZHRoOiA5NSU7IG1hcmdpbjogMCBhdXRvOyB0ZXh0LWFsaWduOiBqdXN0aWZ5OyBib3JkZXI6IDFweCBzb2xpZCAjY2NjOyBwYWRkaW5nOiAxMHB4OyBib3gtc2l6aW5nOiBib3JkZXItYm94OyI+CiAgPHAgc3R5bGU9InRleHQtYWxpZ246IGp1c3RpZnk7Ij4KVGhlcmUgaGFzIGJlZW4gYSBzaWduaWZpY2FudCBpbmNyZWFzZSBpbiB0aGUgYXZlcmFnZSBsaWZlIGV4cGVjdGFuY3kgZ2xvYmFsbHkgc2luY2UgdGhlIGVhcmx5IDE4MDBzLiAgVGhlIHNoaWZ0IGlzIG1vcmUgcHJldmFsZW50IGluIHRoZSBlYXJseSAyMHRoIGNlbnR1cnkuICBUaGVzZSBsaWZlIGV4cGVjdGFuY3kgaW1wcm92ZW1lbnRzIGNvdWxkIGJlIHJlbGF0ZWQgdG8gYWR2YW5jZW1lbnRzIGluIGhlYWx0aGNhcmUsIG51dHJpdGlvbiwgYW5kIGxpdmluZyBjb25kaXRpb25zIG92ZXIgdGltZS4gPGJyPgo8YnI+CkluY29tZSBoYXMgYW4gb3ZlcmFsbCBwb3NpdGl2ZSB0cmVuZCwgd2l0aCBhIHN0ZWVwIGluY2xpbmUgYWZ0ZXIgdGhlIG1pZCAyMHRoIGNlbnR1cnkuICBTb21lIGNhdXNlcyBmb3IgdGhlc2UgaW5jcmVhc2VzIGNvdWxkIGJlIGEgcmVzdWx0IG9mIGluZHVzdHJpYWxpemF0aW9uLCBnbG9iYWxpemF0aW9uLCBhbmQgdGVjaG5vbG9naWNhbCBhZHZhbmNlcyB0aGF0IGhhdmUgaW5mbHVlbmNlZCBwcm9kdWN0aXZpdHkuIFRoZXJlIGlzIGEgc2lnbmlmaWNhbnQgaW5jcmVhc2UgaW4gaW5jb21lIGluIHRoZSBsYXRlIDIwdGggY2VudHVyeSwgd2hpY2ggY291bGQgYmUgaW5kaWNhdGl2ZSBvZiBlY29ub21pYyBleHBhbnNpb24uIDxicj4KPGJyPgpUaGUgd29ybGRzIHBvcHVsYXRpb24gaGFzIGFsc28gc2hvd24gc2lnbmlmaWNhbnQgZ3Jvd3RoIHNpbmNlIHRoZSAxODAwcywgd2l0aCBhbiBhY2NlbGVyYXRpb24gaW4gdGhlIHJhdGUgb2YgaW5jcmVhc2UgZnJvbSB0aGUgMjB0aCBjZW50dXJ5IHRvIHByZXNlbnQgZGF5LiAgVGhpcyBpbmNyZWFzZWQgcG9wdWxhdGlvbiBjb3VsZCBiZSBhIHJlc3VsdCBvZiBkZWNyZWFzZWQgbW9ydGFsaXR5IHJhdGVzLCBtZWRpY2FsIGFkdmFuY2VtZW50cywgYW5kIG90aGVyIGZhY3RvcnMgbGVhZGluZyB0byBoaWdoZXIgYmlydGggcmF0ZXMgYW5kIGxvd2VyIGRlYXRoIHJhdGVzLiBXaXRoIGEgY29udGludWVkIGluY3JlYXNlIGluIHRoZSBnbG9iYWwgcG9wdWxhdGlvbiBjaGFsbGVuZ2VzIGxpa2UgcmVzb3VyY2UgbWFuYWdlbWVudCwgc3VzdGFpbmFiaWxpdHksIGFuZCBhIGRldHJpbWVudGFsIGVudmlyb25tZW50YWwgaW1wYWN0IHdpbGwgYXJpc2UuPGJyPgo8YnI+CldpdGggdGhlIGluY3JlYXNlZCBpbmNvbWUsIHBvcHVsYXRpb24sIGFuZCBsaWZlIGV4cGVjdGFuY3kgb3ZlciB0aGUgcGFzdCBmZXcgY2VudHVyaWVzLCBpdCBzaG93cyB0aGUgdGhlIGdsb2JhbCBlY29ub21pYyBpbmNyZWFzZXMgZm9yIHRoZSB3b3JsZHMgcG9wdWxhdGlvbi4gIEhvd2V2ZXIsIHRoZXNlIGluY3JlYXNlcyBkbyBwcm92aWRlIGNoYWxsZW5nZXMgZm9yIHRoZSBmdXR1cmUgaW4gc3VzdGFpbmFiaWxpdHkgYW5kIHRoZSBkaXN0cmlidXRpb24gb2YgcmVzb3VyY2VzLiBUaGVzZSBjaGFsbGVuZ2VzIGFyZSBub3QganVzdCBsaW1pdGVkIHJlZ2lvbmFsbHkgYnV0IGFsc28gZ2xvYmFsbHkuPGJyPgogPC9wPgo8L2Rpdj4KPGJyPgo8YnI+Cgo=